package dl.bukkit.myststus.function.trigger;

import dl.bukkit.myststus.loader.Register;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;

/**
 * 触发器 - 无需抛空，在TriggerHandler中已经非空验证
 * @param <E>
 */
public interface Trigger<E extends Event> extends Register {

    /**
     * 触发效果
     * @param event event
     */
    void send(E event);

    /**
     * 移除效果
     * @param event event
     */
    void remove(E event);

    /**
     * 无判断执行
     * @param event event
     */
    default void trigger(E event) {
    }

    /**
     * 是否执行移除效果
     * @param event event
     * @return boolean
     */
    boolean isRemove(E event);

    /**
     * 触发事件的类对象
     * @return 事件
     */
    Class<E> getEvent();

    /**
     * 获取触发玩家
     * @param event event
     * @return 玩家
     */
    Player getPlayer(E event);

    /**
     * 获取事件目标实体
     * @param event event
     * @return 目标实体
     */
    Entity getTarget(E event);
}
